perm filename P2LOAD.FAI[SS,SYS]5 blob sn#460366 filedate 1979-07-20 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	A B C D TT1 TT2 TT3 TT4 P CTYLIN ACWPRV DEVPRV JOBSAV JOBDDT JOBSA P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE P2BASE JLOG WENB P2SNAM NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG ZERBEG ZEREND DEFNAM DEFPPN BUFIOW FILNAM EXT FILPPN PDLEN PDL WHOBLK START STRDET SEMILP SEMICL NOPRG SWITL NOPPN NOSWIT NOSEMI IGNFIL GETP2M GETP2X GOTP2M NOCLRC WIN NOTSYS RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX YESCHK CPOPJ1 RUSURE WARNEM NODOWN NOFILE NULFIL NOPRIV IOERR GOAWAY IGNLOD INQUIR INQUIA INQUIB INQUI2 DEVCHK CPOPJ SIXOUT CKDEVS
C00026 ENDMK
C⊗;
;A B C D TT1 TT2 TT3 TT4 P CTYLIN ACWPRV DEVPRV JOBSAV JOBDDT JOBSA P2SORG P2LOOP P2NUM HNGP2F JOBSYM P2SIZE P2BASE JLOG WENB P2SNAM NOREAD BUFLEN BLTLEN BUFFER BLTORG SAVORG ZERBEG ZEREND DEFNAM DEFPPN BUFIOW FILNAM EXT FILPPN PDLEN PDL WHOBLK START STRDET SEMILP SEMICL NOPRG SWITL NOPPN NOSWIT NOSEMI IGNFIL GETP2M GETP2X GOTP2M NOCLRC WIN NOTSYS RSKPSP SKIPSP GETWRD GETWR1 GETWR2 GETWR3 GETRT GETRT1 GETRT2 GETRT3 SYNTAX YESCHK CPOPJ1 RUSURE WARNEM NODOWN NOFILE NULFIL NOPRIV IOERR GOAWAY IGNLOD INQUIR INQUIA INQUIB INQUI2 DEVCHK CPOPJ SIXOUT CKDEVS

TITLE P2LOAD PROGRAM TO LOAD P2SYS INTO P2 MEMORY

;This program is capable of:
;	Loading an arbitrary .DMP file into P2 memory.
;	Reporting the status of P2 memory (NOP2 flag) and of P2 system (P2NUM).
;	Marking P2 memory as up or down.
;	Loading P2 memory, whether it is up or down.
;	Crashing the system if you reference P2 memory that isn't working.

;All commands to this program are given in the monitor command line, separated
;from the monitor command with a semicolon.  The default, if no filename or
;switches are given, is to load the P2 system, P2SYS.DMP[S,SYS].
;To load some other .DMP file, give its name and PPN (default PPN is [S,SYS])
;immediately after the semicolon.  Switches may following the filename,
;or may appear right after the semicolon if no filename is given.

;The available switches are:
;	/?	Do nothing but report the status of P2 memory and P2 system.
;	/U	Mark P2 memory as Up before doing anything else.
;	/D	Mark P2 memory as Down before doing anything else.
;	/N	Don't load P2 memory -- just carry out any /D or /U command.
;	/L	Load P2 memory -- this switch needed if command not given on CTY
;	/Q	Suppress questions about P2 memory really being working--it is!
;	/C	Clear about first 40 pages of P2 core to trap P2 at 141.

A←1
B←2
C←3
D←4
TT1←5		;Contains 'CTY'.  All typeout goes both to TTY and to CTY.
TT2←6		;Address of ASCIZ string to typeout
TT3←7		;AC for TTYMES
TT4←10		;Instruction to execute to (maybe) duplicate CTY typeout on TTY
P←17

CTYLIN←←200000	;Line characteristics bit for CTY

ACWPRV←←40
DEVPRV←←400
JOBSAV←←73			;LAST LOCATION NOT SAVED IN DUMP FILE
JOBDDT←←74			;LOCATION OF DDT'S ADDRESS
JOBSA←←120			;LOCATION OF STARTING ADDRESS
P2SORG←←200			;FIRST LOCATION WE SHOULD LOAD FROM P2SYS FILE
P2LOOP←←101			;HERE IS WHERE P2 WILL LOOP WAITING FOR US
P2NUM←←210			;ZERO THIS TO TELL RUNNING P2 TO SHUT DOWN
HNGP2F←←212			;SETOM THIS TO TELL P1 TO FLUSH ACTIVE P2 DEVICES
JOBSYM←←116			;WHERE TO FIND SYMBOL TABLE POINTER
P2SIZE←←400			;HOW MANY PAGES OF P2 CORE
P2BASE←←14000			;BEGINNING PHYSICAL PAGE NUMBER OF P2 MEMORY
JLOG←←10000			;JBTSTS BIT MEANING LOGGED IN
WENB←←20			;WRITE ENABLE BIT FOR GETHI
P2SNAM←←224			;LOCATION HOLDING 'P2SYS ' IF FILE IS P2 SYSTEM

OPDEF P2UUO [CALLI 400125]	;JUST UNTIL TOMORROW

NOREAD←←<P2SORG-JOBSAV>-1	;NUMBER OF WORDS OF DMP FILE WE IGNORE
BUFLEN←←<NOREAD+177>&777600	;LENGTH OF BUFFER WE READ INTO
BLTLEN←←BUFLEN-NOREAD		;HOW MANY WORDS WE HAVE TO BLT INTO P2 CORE
BUFFER:	BLOCK BUFLEN		;HERE IS THE BUFFER
BLTORG←←BUFFER+NOREAD		;FIRST WORD WE CARE ABOUT
SAVORG←←BUFFER-<JOBSAV+1>	;ADDR X IN CORE IMAGE IS WORD SAVORG+X HERE
ZERBEG←←240			;P2 ADDRESS OF BEGINNING OF AREA ZEROED
ZEREND←←37777			;END OF AREA ZEROED TO TRAP P2 AT 141 (UUO LOC)
  ;ZEREND ISN'T SET TO -1 SINCE WE'D LIKE NOT TO CLOBBER ANY FONT COMPILER ALIVE

DEFNAM:	SIXBIT /P2SYS DMP/
	0
DEFPPN:	SIXBIT /  SSYS/

BUFIOW:	IOWD BUFLEN,BUFFER
	0

FILNAM:	0
EXT:	0
	0
FILPPN:	0

PDLEN←←10
PDL:	BLOCK PDLEN

WHOBLK:	BLOCK 22		;For wholine of P2 device user


START:	RESET
	SETZM GODOWN#		;ASSUME NOT WANTING TO PUT P2 MEMORY UP
	SETZM GOUP#		;ASSUME NOT WANTING TO TAKE P2 MEMORY DOWN
	SETZM CLRCOR#		;ASSUME NOT WANTING TO CLEAR CORE TO TRAP P2
	SETZM NOLOAD#		;ASSUME NOT SUPPRESSING ACTUAL CORE LOADING
	SETZM QUIETF#		;ASSUME NOT WANTING TO LOAD P2 MEM EVEN IF DOWN
	MOVEI A,0
	JBTSTS A,
	TLNN A,JLOG
	OUTSTR [ASCIZ/
/]				;IN CASE NOT LOGGED IN
	MOVE P,[IOWD PDLEN,PDL]
	MOVSI A,ACWPRV!DEVPRV	;MUST BE ABLE TO WRITE P2 CORE
	SETPRV A,
	MOVSI TT1,'CTY'		;ALWAYS TYPE OUT ON CTY (except trivial msgs)
	MOVE TT4,[OUTSTR (TT2)]	;INSTRUCTION TO DUPLICATE TYPEOUT ON OWN TTY
	SETOB A,DET#		;ASSUME DETACHED
	GETLIN A		;SEE IF WE ARE DETACHED
	AOJE A,STRDET		;JUMP IF DETACHED
	SETZM DET		;FLAG NOT DETACHED
	TLNE A,CTYLIN
	SKIPA TT4,[CAI]		;WE'RE ON CTY, DON'T TYPE OUT EVERYTHING TWICE
	SETOM NOLOAD		;Default when not on CTY is not to load P2
STRDET:	MOVE B,[DEFNAM,,FILNAM]
	BLT B,FILPPN		;SET UP DEFAULT FILENAME
	JUMPE A,NOSEMI		;JUMP IF DETACHED -- DON'T TRY TO SCAN FILENAME
	RESCAN			;LOOK FOR NONSTANDARD FILENAME
SEMILP:	INCHSL A		;READ A CHAR SEARCHING FOR SEMICOLON
	 JRST NOSEMI		;NOTHING TO READ, USE STANDARD FILE
	CAIN A,";"
	JRST SEMICL		;GOT ONE, NOW READ FILENAME
	CAIE A,175
	CAIN A,12
	JRST NOSEMI		;END OF LINE WITH NO SEMI
	JRST SEMILP		;ELSE KEEP LOOKING

SEMICL:	PUSHJ P,GETWRD		;READ FILENAME
	JUMPN B,.+2		;MUST BE A FILENAME
	MOVE B,DEFNAM		;ELSE WE USE THE DEFAULT
	MOVEM B,FILNAM
	MOVSI B,'DMP'
	CAIN A,"."		;EXPLICIT EXTENSION?
	PUSHJ P,GETWRD		;YES, READ IT
	MOVEM B,EXT
	MOVE D,DEFPPN		;DEFAULT PPN
	CAIE A,"["		;EXPLICIT PPN?
	JRST NOPPN		;NO, USE STANDARD
	MOVEI D,0
	DSKPPN D,		;GET DEFAULT PPN
	PUSHJ P,GETRT		;GET PRJ
	JUMPE B,.+2		; IF ANY
	HRL D,B
	CAIE A,","		;EXPLICIT PRG?
	JRST NOPRG		;NO
	PUSHJ P,GETRT		;YES, READ IT
	JUMPE B,.+2
	HRR D,B
NOPRG:	CAIN A,"]"
SWITL:	PUSHJ P,RSKPSP		;SKIP BRACKET IF ANY (OR SWITCH CHAR)
NOPPN:	CAIE A,"/"
	JRST NOSWIT
	PUSHJ P,RSKPSP		;GET NEXT CHAR
	CAIN A,"?"
	JRST INQUIR		;Just report P2 state
	ANDI A,137		;MAKE UPPER CASE
	CAIN A,"D"
	JRST [	SETOM GODOWN	;Wants to mark P2 memory down before loading
		SETZM GOUP
		JRST SWITL]
	CAIN A,"U"
	JRST [	SETOM GOUP	;Wants to mark P2 memory up before loading
		SETZM GODOWN
		JRST SWITL]
	CAIN A,"C"
	JRST [	SETOM CLRCOR	;Wants to clear core to try to trap P2 at 141
		JRST SWITL]
	CAIN A,"N"
	JRST [	SETOM NOLOAD	;Doesn't really want to load anything
		JRST SWITL]	;Probably just marking memory up or down
	CAIN A,"L"
	JRST [	SETZM NOLOAD	;Really wants to load (maybe not on CTY)
		JRST SWITL]
	CAIN A,"Q"
	JRST [	SETOM QUIETF	;Wants to load P2 core even if it is "down"
		JRST SWITL]
	OUTSTR [ASCIZ\?Illegal switch: /\]
	OUTCHR A
	JRST DOEXIT
	
NOSWIT:	CAIE A,12
	JRST SYNTAX		;MUST END WITH CRLF
	MOVEM D,FILPPN
NOSEMI:	SETO B,
	SETPRV B,		;Get our privileges
	TLNN B,ACWPRV		;Who are we to write P2 memory?
	JRST NOPRIV		;Don't have ACW!

	SKIPE NOLOAD		;Suppressing actual loading of file into core?
	JRST IGNFIL		;Yes, don't look for file
	MOVE D,[FILNAM,,A]
	BLT D,D			;GET FILENAME
	INIT 17			;OPEN THE DISK
	 'DSK   '
	 0
	 JRST NOFILE
	LOOKUP A		;FIND THE FILE
	 JRST NOFILE		;OOPS
	HLRES D			;NEGATIVE LENGTH OF FILE
	JUMPGE D,NULFIL		;JUMP IF EMPTY FILE, OR FILE BIGGER THAN 128K
	CAML D,[-BUFLEN]	;FILE SMALLER THAN SIZE OF FIRST PART OF READ?
	SKIPA C,D		;YES, READ SMALLER AMOUNT, SET ONE-PART FLAG
	MOVEI C,-BUFLEN		;ZERO LH IS FLAG MEANING WANT TO READ IN 2 PARTS
	HRLM C,BUFIOW		;AMOUNT TO READ
	SETZM SAVORG+P2SNAM	;DON'T BE FOOLED BY SHORT FILE AND RESTARTING
	IN BUFIOW		;READ FIRST PART OF FILE
	JRST .+2		;READ OK
	 JRST IOERR		;OOPS
;DON'T CLOBBER ACS C AND D BETWEEN HERE AND THE SECOND 'IN' UUO
	MOVE A,SAVORG+P2SNAM	;GET NAME OF SYSTEM IF THIS IS P2 SYSTEM
	CAME A,['P2SYS ']	;IF IT ISN'T P2 SYSTEM, THEN FORCE MEMORY DOWN
	SETOM GODOWN		;DON'T LET P1 BE CONFUSED BY DIAGNOSTIC IN P2 MEM
IGNFIL:	PUSHJ P,CKDEVS		;Report any devices in use
	MOVEI TT2,0		;Flag nothing to say yet
	SKIPE GODOWN
	JRST [	P2UUO 3,	;TAKE P2 MEMORY DOWN
		 JRST NODOWN	;FAILED
		MOVEI TT2,[ASCIZ/P2 memory is now marked as Down.
/]
		JRST GETP2M]	;OK
	P2UUO 0,		;SKIP IF P2 MEMORY UP
	 SKIPN GOUP		;SKIP IF WANT TO MARK P2 MEMORY UP
	JRST GETP2M		;MEMORY NOT GOING UP OR ALREADY UP
	PUSHJ P,RUSURE		;MAKE SURE HE'S SURE MEMORY IS WORKING
	 EXIT			;NOT SURE, QUIT
	P2UUO 2,		;PUT P2 MEMORY UP (NO FAILURE RETURN)
	MOVEI TT2,[ASCIZ/P2 memory is now marked as Up.
/]
	SKIPE NOLOAD		;If putting memory up, warn him to reload P2SYS
	MOVEI TT2,[ASCIZ/P2 memory is now marked as Up.
You should reload P2 if you want the system to use it.
/]
GETP2M:	SKIPE NOLOAD		;Suppressing actual loading of file into core?
	JRST IGNLOD		;Yes, then maybe we're all done
	P2UUO 4,		;GET P2 MEMORY AS OUR UPPER
	 CAIA			;FAILED TO GET P2 MEM AS OUR UPPER
	JRST GOTP2M		;Got P2 memory
	MOVEI TT2,[ASCIZ /Can't write P2 memory because it is down!
/]
	SKIPE DET
	JRST GOAWAY		;Detached, don't try to load down core
	SKIPE QUIETF		;Skip unless he said /Q
	JRST GETP2X		;Don't ask anything for /Q
	OUTSTR (TT2)
	OUTSTR [ASCIZ/Do you want to load into P2's memory anyway? /]
	PUSHJ P,YESCHK
	 EXIT
GETP2X:	PUSHJ P,RUSURE		;Are you sure?
	 EXIT			;No
	MOVEI TT2,[ASCIZ /Can't map P2's memory into job's upper.
/]
	MOVE A,[P2SIZE,,<P2BASE*40>+WENB>]
	GETHI A,
	 JRST GOAWAY
GOTP2M:	SETZM 400000+P2NUM	;TELL P2 TO SHUT DOWN WHILE WE LOAD IT
	SETOM 400000+HNGP2F	;TELL P1 TO SHUT DOWN ACTIVE P2 DEVICES

	SKIPN CLRCOR
	JRST O←Ot9M~⊗Rjj↓QAAβ↓A-E#λ%n∞dz

⊗∩αVV=¬B∞Qαdz∞εRLz84(M~⊗Rjj↓QAAβ↓A.j-∩
⊗≤KZε:⊃∧~2⊗ε∩αN>6*α>→α≤zJ∃α$yαRJ
↓αAI¬""⊗J*αεQ↓!D4(Lj>Z∃∧	2mQβ↓AAA]R⊗J
,911Qβ↓AAA]R⊗J
,9-FthP&
2"α¬1Qβ↓AAA]R⊗J⊗t %n∩|q≡Qα≤b>

-⊃αε2bα>→α≤zJ∃1∧b⊗NQ∧2>:Q∧~>6BLb⊗Iα$B⊗J∀hR:>∞e∩
h&lzZ∃α
bn
2$zJ≥1c!AAAβ↓.AJ≤zJ≡thP&
2"α¬1Qβ↓AAA]↓JN>∀9.
2$b⊗95λIn∞>¬Iα~&∃~QαB
∩Qα>2α~&2*α&:RzαAIα≤zJ∀4PJ6>Z,Iα¬1e↓JN&T(Yeykλ%n"L:"⊗N"α2>∞
"&>9∧J9αA∩α∞>J(h(&6⎇2⊗5α
aQAAβ→\$%\"∩QαTz
J⊗`h(&6⎇2∃α¬e~εZ>∀9.*>∃~f4%\R>
NLiα~J|iα~&d(4(&lzZ⊗5∧	1QAβ↓MX$KZNεZ*α"⊗J*α~>I∧"∩P4PJ6>Z*α¬2N
2>J≥\R>
∩% %n*|∩∩∩Q∧2J>5∧2&2∀hP&6>4*5α¬c!AAAβ↓.*>∀"∩P%]~εZ∃∧2>Iαβ∩&:$hP&6>5~%α¬d∩V~2,q"⊃$KZ2⊗:="!α>2α~&2*αR=α<y↓":,:εR&4)$4(LBJJ%∧	1QAβ↓AA.β∩N>J:Z
2Rd*95DhP&6>4*%α	c$%n,r⊃α>2α&>↑"α2&N h(&*,jB1α~b↑&8HIn*Vm↓α&→∧z:2e∧z:∃α∀*ε⊃α<
Mα:,*∩⊗⊂hP&&9∧λ$$%]∩⊗ε⊃¬∩⊗NQ∧"&J⊗≥"2eαLrR=αβ⊃α∞>∀(4(%∧RJNQ¬:&8$KZ∩>:*λ4(&lzZ⊗%¬"QI2\
N∞&R↓>↔K⊗{Iβ'rβO↔∂}s⊃βC∂∪Qβ?2βK↔π"q↓α/;πK∃λh)>thP&*J≥!α≡>
:εd4Ph*↑&sP&6>4*%αR#⊃2nε≤~&i↓⎇↓Iβ3}∪↔⊃rq9↓>hh(&6⎇2⊗%α%!M2R#λ4(&%"f6⊗~αRQM`h(%αT2∞04PJb∞Q¬"QP$HIn7πN∪∃βSOβ∃β?rβ?←9¬"Reβ&{=↓#N1β;?"βOπ7*βπMα≥"e$4PJ6>Z*α¬2N
2>J≥\R>
NλIn∨↔"βOSπ↔#';≥ε∪∪K/≠L4(LBJ2%∧	1!rU∩NQyHh(&6⎇2⊗5α
aQAAβ↓A.A∀b>>@KZ&Q≡~α
⊗⊗rα*JN$J:≥α∧z&:Q∧B⊗J∀hP&6>4*5α¬c!AAAβ↓-EQλIn>I∧jεf
*αRJε¬α&:≥∧B⊗J∀hP&6>4)α¬1#↓AAAαZAJNt
44(L~ε6∃∧	2m≡β∩NfMα:t4(LRJNQ∧r>RNM_$%n≤
9≡Q¬α>NNL∩2eα∀)α¬αβ⊃αNf≥"⊗44PJ6>Z,Iα¬1⊂h(&Nd*⊗Aα
`$%n<
&Qα
α↑"&d(4(&lzZ∃α
aQAAβ↓A.A∀rV44PJ6>Z,IαRQ∩bnεN≤Ji↓>β⊃β;↔.#MβSzβ∃β∨#πKS.!1βπ"↓IAQph)>thP&*Vmα∃α¬d:>ε↑
H4(&lzZ⊗%¬"QI2\
N∞&R↓>AIπ∪W;;Ns≥84Rzt4(L
>*∃∧	2≡>
:εd4Tr>RNM→h&6⎇2⊗%α%!I2n
~∞&iαzAIβf{π∪↔"aβW"β;?Qπ;'S!ε	αAIπ≠gOS.i∧4)⎇h4(&U∩NQα<zε↑εHh(4*∃~.BNβP&&:≤B↑1αλH%nN\JAαRzα¬αJ,
1α∞D
H4*≤Z&BNβP&∞εLqα¬1($%nL::>J*α∞H4PJ*JN"αJN.¬~@4(L~ε&∃∧	1Q@HIn&≡tzJ∃α≥αε∞∀hP&∞εLqα¬1λ$%nL::>J*αRελhP&*J≥!αJN]αN@4PJB>BRαA04Ph*≡⊗%:J⊃hMαVN"RαA2J≤ZBN@HInN.M↓αBVt~RVε$J>9α≤BεIα∀*~>J*αJ⊗ε$J:≥αt
6∀4PJ6>Z,Iα	1h(&6⎇2∃α
eZB>&u!↓Y2∃h4*≡-"↑IEPJ∞ε&d)α¬1!@4(M~V
%∧	1Q@HIn2
¬"=αV_h(&∞J1α¬b∩¬λ$KZ"=αE*44(L~ε&2*α¬1
R⊂4(&U∩NQα<*R↑I_h*≡⊗%:IIhM~V
%∧	1Q@hP&RJtqα	1;84(&L"B	α
b4(LJ:∞"<aα∧4PJ*JN"α≡⊗R=⊃D4(hR≡⊗R=⊃Mh&≤
&1α
a	AλhP&∞εLb∃α¬b⊃eλ4PJ*JN"αN.&¬~@4(LRJNQ∧:⊗R↑∪⊂4(4T:⊗RJ#P&BV≤B)αAe∩N.B≥$%n≤Z&Aα¬*:∞R,
R&>rα∞"ε∩α
⊗~⎇∩∃αJ,
∩&::α:ε6(h(&6⎇1J↔oEI B,0
	MOVE C,[POINT 6,B]
GETRT1:	CAILE A,140
	SUBI A,40		;LC TO UC
	CAIL A,"A"		;HO HUM
	CAILE A,"Z"
	JRST GETRT3
GETRT2:	LSH B,6
	ADDI B,-40(A)
	INCHWL A
	JRST GETRT1

GETRT3:	CAIL A,"0"
	CAILE A,"9"
	JRST SKIPSP
	JRST GETRT2

SYNTAX:	CLRBFI			;SORRY
	OUTSTR [ASCIZ /Error in filename, try again./]
	JRST DOEXIT

YESCHK:	CLRBFI
	INCHWL A
	CLRBFI
	ANDI A,137		;No bucky bits, upper case
	CAIN A,"Y"
CPOPJ1:	AOS (P)			;Skip on yes
	POPJ P,

RUSURE:	SKIPE QUIETF
	JRST WARNEM		;Don't ask anything if /Q given
	OUTSTR [ASCIZ/If P2's memory isn't working, this will crash the system.
Are you sure it is working? /]
	PUSHJ P,YESCHK
	 POPJ P,		;DIRECT RETURN IF NOT SURE
	JRST CPOPJ1		;SKIP IF SURE

WARNEM:	OUTSTR [ASCIZ/P2's memory better be working or this will crash the system.
/]
	MOVEI A,8
	SLEEP A,		;Let him ponder that briefly
	JRST CPOPJ1		;But don't bother asking about going on

NODOWN:	OUTSTR [ASCIZ /UUO to mark P2 memory down failed--probably not enough free core./]
	JRST DOEXIT

NOFILE:	MOVEI TT2,[ASCIZ /Can't look up file!
/]
	JRST GOAWAY

NULFIL:	MOVEI TT2,[ASCIZ /Empty file!
/]
	SKIPE D
	MOVEI TT2,[ASCIZ /File too big to load into P2 memory!
/]
	JRST GOAWAY

NOPRIV:	MOVEI TT2,[ASCIZ /Not privileged to write P2 memory!
/]
	SKIPE DET		;Skip unless detached
	JRST GOAWAY		;Detached--type on CTY
	OUTSTR (TT2)		;Just type on TTY
	EXIT

IOERR:	MOVEI TT2,[ASCIZ /Error on first read.  P2 core not modified.
/]
GOAWAY:	MOVEI TT3,TT1
	TTYMES TT3,
	 JFCL
	XCT TT4			;Maybe type on own TTY too (if not same as CTY)
	EXIT

IGNLOD:	JUMPN TT2,GOAWAY	;If we changed anything, report it
	JRST INQUIB		; else report current status (already did devices)

;Here for /? switch, to report status of P2 and its devices
INQUIR:	INCHWL A
	ANDI A,177
	CAIE A,12
	CAIN A,175
	JRST INQUIA
	JRST INQUIR		;Look for end of command line

INQUIA:	PUSHJ P,CKDEVS		;Report any P2 devices in use
INQUIB:	P2UUO 0,		;Skip if P2 memory up
	 JRST INQUI2		;Memory down
	OUTSTR [ASCIZ/P2 memory is currently Up, /]
	MOVEI TT2,[ASCIZ/and a P2 system has been running./]
	P2UUO 1,		;Skip if P2 is supposedly running
	 MOVEI TT2,[ASCIZ/but no P2 system is running./]
	OUTSTR (TT2)
	JRST DOEXIT

INQUI2:	OUTSTR [ASCIZ/P2 memory is currently marked as Down./]
DOEXIT:	MOVEI A,0
	JBTSTS A,
	TLNN A,JLOG
	OUTSTR [ASCIZ/
/]				;IN CASE NOT LOGGED IN
	EXIT

DEVCHK:	MOVE B,A		;SAVE DEVICE NAME
	DEVUSE A,
	TLNE A,77		;DEVICE IN USE (ANY JOB NUMBER)?
	TLNN A,200000		;INITED?
	POPJ P,			;NO
	PUSHJ P,SIXOUT		;YES, PRINT DEVICE NAME
	OUTSTR [ASCIZ/ in use by job:
/]
	AND A,[77,,0]		;JOB NUMBER
	HRRI A,WHOBLK
	WHO A,			;Get wholine
	OUTSTR WHOBLK
CPOPJ:	POPJ P,

SIXOUT:	MOVEI C,0
	JUMPE B,CPOPJ
	ROTC B,6
	ADDI C,40		;SIXBIT TO ASCII
	OUTCHR C
	JRST SIXOUT

CKDEVS:	MOVSI A,'XGP'
	PUSHJ P,DEVCHK
	MOVSI A,'VRN'
	PUSHJ P,DEVCHK
	MOVSI A,'PTR'
	PUSHJ P,DEVCHK
	MOVSI A,'PTP'
	PUSHJ P,DEVCHK
	MOVSI A,'PLT'
	PUSHJ P,DEVCHK
	POPJ P,			;I KNOW, WASTES AN INSTRUCTION!

	END START